package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 通过反射对象可以反应出其表示内容的相关信息
 * 比如Method可以反应出其表示的方法的相关信息，如:方法名，返回值类型，参数列表等等
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person");
        //Person->public void say(String name,int count)
        Method method = cls.getMethod("say",String.class,int.class);
        //Person->public String getName()
//        Method method = cls.getMethod("getName");
        //获取方法名
        String name = method.getName();
        //获取方法的修饰符
        int modifier = method.getModifiers();
//        if(modifier==Modifier.PUBLIC){
//            System.out.println("是一个公开方法");
//        }else if(modifier==Modifier.PRIVATE){
//            System.out.println("是一个私有方法");
//        }else if(modifier==Modifier.PROTECTED){
//            System.out.println("是一个受保护的方法");
//        }
        switch (modifier){
            case Modifier.PUBLIC:
                System.out.println("是一个公开方法");
                break;
            case Modifier.PRIVATE:
                System.out.println("是一个私有方法");
                break;
            case Modifier.PROTECTED:
                System.out.println("是一个受保护的方法");
                break;
        }

        //获取方法的返回值类型
        Class returnType = method.getReturnType();
        System.out.println("返回值类型为:"+returnType);
        //获取方法参数的个数
        int count = method.getParameterCount();
        System.out.println("方法一共有"+count+"个参数");
    }
}






